<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class serviceModifierPageLiens
{
	
	
	protected static function getPage()
	{
		
		global $core;
		
		# Sélection de la page
		$page = $core->site->getPages(array(
			'page_id' 			=> (integer) $_POST['page_id'],
			'page_generateur'	=> 'liens'
		), CP_GET_STATIC, CP_TEMPORAIRE);

		if($page->isEmpty()) {
			throw new cpErreur(__('Donnée invalide'), 'page_id', 301);
		}
		
		# Permission nécessaire: pages
		$core->auth->verifierPermission('pages', true);
			
		# Si l'utilisateur actuel n'est pas l'auteur de la page
		if($page->utilisateur_id != $core->auth->getUtilisateurID()) {
			# Permission nécessaire: toutesPages
			$core->auth->verifierPermission('toutesPages', true);
		}
		
		return $page;
		
	}
	
	
	public static function enregistrer($publier=false)
	{
		
		global $core;
		
		# Début de la transaction
		$core->con->begin();
		
		try {
		
			$page = self::getPage();
			
			# Conditions
			$conditions = array();
			
			if(!is_array($_POST['conditions_liens'])) {
				throw new cpErreur(__('Vous devez indiquer au moins une condition.'), 'conditions', 101);
			}
	
			try {
				$conditions = $core->parseConditionsPage($_POST['conditions_liens'], true);
			} catch(Exception $e) {
				throw new cpErreur($e->getMessage(), 'conditions', 101);
			}
			
			if(!in_array($_POST['tri_champ'], array('page_titre', 'page_url', 'cat_id', 'page_date', 'page_date_modification')) ||
				!in_array($_POST['tri_ordre'], array('asc', 'desc'))
			) {
				throw new cpErreur(__('Donnée invalide'), 'tri_ordre', 103);
			}
			
			# Curseur
			$cur = $core->con->openCursor($core->prefix.'temp_pages');
			
			# Propriétés communes à toutes les pages
			$page->initGenerateur();
			$page->generateur->adminProprietesEnregistrer($cur, $_POST, array('tags'));
			
			# Traiter le contenu
			$page_entete = $_POST['page_entete'];
			$page_entete_xhtml = '';
			$page->generateur->adminTraiterContenu($page_entete, $page_entete_xhtml, $cur->page_options['cp']['format']);
			$cur->page_entete		= $page_entete;
			$cur->page_entete_xhtml	= $page_entete_xhtml;
			
			# Autres propriétés
			$cur->page_titre		= $_POST['page_titre'];
			$page_options = $cur->page_options;
			$page_options['conditions'] = $conditions;
			$page_options['tri'] = array('champ' => $_POST['tri_champ'], 'ordre' => $_POST['tri_ordre']);
			$page_options['tri_libre'] = (boolean) $_POST['tri_libre'];
			$page_options['affiche_extrait'] = (boolean) $_POST['affiche_extrait'];
			$page_options['liens_par_page'] = (integer) $_POST['liens_par_page'];
			$page_options['cp']['medias'] = $page->generateur->medias;
			$cur->page_options		= $page_options;
			
			# Enregistrer les données		
			$page->enregistrer($cur);
			
			# Fin de la transaction
			$core->con->commit();
		} catch(Exception $e) {
			$core->con->rollback();
			throw $e;
		}
		
		# Publication?
		if($publier) {
			$page->publier();
		}
		
		return array(
		'erreur' 	=> 0,
			'nouveau'	=> (integer) $page->page_options['cp']['nouveau']
		);
		
	}
	
	
	public static function publier()
	{
		
		global $core;

		# Permission nécessaire: publierPage
		$core->auth->verifierPermission('publierPage', true);
		
		return self::enregistrer(true);
		
	}
	
	
}

?>